#Requires AutoHotkey v2.0

; ========================================
; 配置区域 - 修改这些变量来调整设置
; ========================================
PROJECT_DIR := "D:\myobj\myxhs"           ; 项目目录
PYTHON_SCRIPT := "src/myxhs/myxhs2.py"    ; Python脚本路径
LOG_FILE := PROJECT_DIR . "\scheduler_log.txt"  ; 日志文件
EXEC_TIME_1 := "06:00"                    ; 第一次执行时间
EXEC_TIME_2 := "20:00"                    ; 第二次执行时间

; ========================================
; 主程序
; ========================================
#SingleInstance Force

; 记录启动信息
LogMessage("定时任务启动")

; 设置定时器，每分钟检查一次
SetTimer(CheckTime, 60000)
CheckTime()  ; 立即检查一次

return

; ========================================
; 检查时间并执行
; ========================================
CheckTime() {
    global EXEC_TIME_1, EXEC_TIME_2
    
    currentTime := FormatTime(, "HH:mm")
    
    if (currentTime = EXEC_TIME_1 || currentTime = EXEC_TIME_2) {
        LogMessage("执行任务: " . currentTime)
        RunTask()
    }
}

; ========================================
; 执行任务
; ========================================
RunTask() {
    global PROJECT_DIR, PYTHON_SCRIPT
    
    try {
        SetWorkingDir(PROJECT_DIR)
        command := "pdm run python " . PYTHON_SCRIPT
        
        ; 执行命令
        result := ComObject("WScript.Shell").Exec("cmd /c " . command)
        
        ; 等待完成
        while result.Status = 0
            Sleep(100)
        
        ; 记录结果
        if (result.ExitCode = 0) {
            LogMessage("任务执行成功")
        } else {
            LogMessage("任务执行失败，退出代码: " . result.ExitCode)
            errorOutput := result.StdErr.ReadAll()
            if (errorOutput != "")
                LogMessage("错误: " . errorOutput)
        }
        
    } catch Error as e {
        LogMessage("执行异常: " . e.Message)
    }
}

; ========================================
; 记录日志
; ========================================
LogMessage(message) {
    global LOG_FILE
    timestamp := FormatTime(, "yyyy-MM-dd HH:mm:ss")
    logEntry := "[" . timestamp . "] " . message . "`n"
    
    try {
        FileAppend(logEntry, LOG_FILE, "UTF-8")
    } catch {
        ; 如果写入失败，显示消息框
        MsgBox("日志写入失败: " . message)
    }
}

; ========================================
; 热键控制
; ========================================
^!s:: {  ; Ctrl+Alt+S: 手动执行
    LogMessage("手动执行")
    RunTask()
}

^!x:: {  ; Ctrl+Alt+X: 退出
    LogMessage("程序退出")
    ExitApp()
}

^!l:: {  ; Ctrl+Alt+L: 查看日志
    try {
        Run(LOG_FILE)
    } catch {
        MsgBox("无法打开日志文件")
    }
} 